/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package CONTROLES;

import INTERFAZ.Bienvenida;
import MODELOS.Cuenta;
import MODELOS.Pago;
import MODELOS.Recibo;
import MODELOS.TipoCambio;
import UTILITARIOS.Fecha;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Date;

/**
 *
 * @author Administrador
 */
public class ControlRecibo {
    
    public ControlRecibo(){

    }
    public Recibo getRecibo(int idRecibo){

        Conexion conection = new Conexion();
        Recibo recibo = new Recibo();
        try{
            Connection conectado = conection.getConexion();
            PreparedStatement psc = conectado.prepareStatement("select * from RECIBO where id_recibo = '"+idRecibo+"' ");
            ResultSet respEmp = psc.executeQuery();
            while (respEmp.next()){
                recibo.setIdRecibo(respEmp.getInt(1));
                recibo.setTipoCambio(respEmp.getDouble(2));
                recibo.setMonto(respEmp.getDouble(3));
                recibo.setIdUsuario(respEmp.getInt(4));
                recibo.setFecha(respEmp.getDate(5));
                recibo.setIdSucursal(respEmp.getInt(6));
            }
        }catch (SQLException e){
            System.out.println("error al recuperar lista de Pagos Disponibles " + e.getLocalizedMessage());
        }
        return recibo;
    }

    


    public Recibo registrarReciboPago(Recibo r, Cuenta cuenta, String modo)
    {
       Conexion conection = new Conexion();
       int c = 0;
       try{
            Connection conectado = conection.getConexion();
            PreparedStatement ps1 = conectado.prepareStatement("select nextval('recibo_id_recibo_seq')");
            ResultSet respEmp = ps1.executeQuery();
            while (respEmp.next()){
                c = respEmp.getInt(1);
            }
            ps1.close();
            ArrayList<Pago> pagosDisponibles = cuenta.getPagosDisponibles();
            String sentencia = "";
            if(pagosDisponibles.size()>0){
                for(int i=0;i<pagosDisponibles.size();i++)
                    sentencia = sentencia + " UPDATE pagos SET estado='PAGADO', modo_pago = '"+modo+"', id_recibo='"+c+"' WHERE id_pago = '"+pagosDisponibles.get(i).getIdPago()+"';";
            }

            sentencia = "INSERT INTO recibo(id_recibo, id_sucursal, tipo_cambio, monto, fecha, id_usuario) VALUES ('"+c+"','"+r.getIdSucursal()+"','"+ r.getTipoCambio() +"','"+r.getMonto()+"','"+r.getFecha()+"','"+r.getIdUsuario()+"');"
                        + sentencia;

            PreparedStatement ps = conectado.prepareStatement(sentencia);
            ps.executeUpdate();
            ps.close();
            r.setIdRecibo(c);
        }catch (SQLException em) {
            System.out.println("error al Registrar el Recibo "+em.getLocalizedMessage() );
            return null;
          }
       return r;
     }

    public Recibo registrarReciboCuenta(Recibo r, Cuenta cuenta, String motivo, String modoPago)
    {
       Conexion conection = new Conexion();
       int c = 0;
       Date fecha = new Fecha().getFechaDate();
       String estadoPago;
       estadoPago = "PAGADO";
       try{
          Connection conectado = conection.getConexion();
          PreparedStatement ps1 = conectado.prepareStatement("select nextval('recibo_id_recibo_seq')");
          ResultSet respEmp = ps1.executeQuery();
          
            while (respEmp.next()){
                c = respEmp.getInt(1);
            }
            ps1.close();
            PreparedStatement ps = 
                    conectado.prepareStatement("INSERT INTO recibo(id_recibo, id_sucursal,tipo_cambio, monto,fecha, id_usuario) VALUES ('"+c+"','"+r.getIdSucursal()+"','"+ r.getTipoCambio() +"','"+r.getMonto()+"','"+r.getFecha()+"','"+r.getIdUsuario()+"');"
                    + "UPDATE Cuenta SET estado='"+motivo+"', fecha_cierre = '"+fecha+"', id_recibo = '"+c+"' WHERE id_cuenta = '"+cuenta.getIdCuenta()+"';"
                    + "UPDATE pagos SET estado='"+estadoPago+"',id_recibo = '"+c+"', modo_pago = '"+modoPago+"' WHERE id_cuenta = '"+cuenta.getIdCuenta()+"' AND estado = 'PENDIENTE';");
            ps.executeUpdate();
            ps.close();
            r.setIdRecibo(c);

        }catch (SQLException em) {
            System.out.println("error al Registrar el Recibo "+em.getLocalizedMessage() );
            return null;
            }
        
        return r;
    }

}